function regex(regular, value){
	const regE = new RegExp(regular);
	return regE.test(value);
}

export const checkResult = function(rule, value) {
	switch (rule) {
		case 'number':
			// 数值
			return regex(/^-?[1-9][0-9]?.?[0-9]*$/, String(value));
			break;
		case 'integer':
			// 整数（大于0的整数）
			return regex(/(^[0-9]*$)/, String(value));
			break;
		case 'integerNotZore':
			// 整数（大于0的整数）
			return regex(/(^[1-9]{1}[0-9]*$)/, String(value));
			break;
		case 'float':
			// 浮点数
			return regex(/^(-?\\d+)(\\.\\d+)?$/, String(value));
			break;
		case 'chn':
			// 中文
			return regex(/^[\u4e00-\u9fa5]+$/u, decodeURI(value));
			break;
		case 'chnNum':
			// 同时包含数字和汉字
			return regex(/^[0-9\u4e00-\u9fa5]+$/u, decodeURI(value));
			break;
		case 'chnOrNum':
			// 包含汉字或者数字
			return regex(/^[\u4e00}-\u9fa5]+|[0-9]+$/u, decodeURI(value));
			break;
		case 'alphaLine':
			// 英文和下划线，首尾不能是下划线、且不能只是下划线
			return (value.slice(0, 1) != '_' && value.slice(-1) != '_' && regex(/^[A-Za-z\_]+$/, value));
			break;
		case 'landline':
			// 固定电话号
			return regex(/^(\+\d{2}-)?0\d{2,3}-\d{7,8}|(\+\d{2}-)?\(0\d{2,3}\)\d{7,8}$/, decodeURI(value));
			break;
		case 'mobile':
			// 手机号
			return regex(/^1[345789]\d{9}$/, parseInt(decodeURI(value)));
			break;
		case 'alphaNum':
			// 字母和数字
			return regex(/^[a-zA-Z]+|[0-9]+$/, value);
			break;
		case 'email':
			// 电子邮箱
			return regex(/^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, value);
			break;
		case 'zipCode':
			// 邮政编码
			return regex(/^[0-9]{6}$/, value);
			break;
		case 'idCard':
			// 身份证号
			// return regex(/^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/i, value);
			return regex(/^\d{17}[0-9Xx]$/i, value);
			break;
		case 'bankNo':
			// 银行卡号
			return regex(/^([1-9]{1})(\d{14}|\d{15}|\d{16}|\d{17}|\d{18})$/, value)
			break;
		default:
			// 带范围验证
			if (typeof rule == 'string' && rule.indexOf(':') > -1) {
				// 字符串格式
				var ruleArr = rule.split(':');
			}
			if (typeof rule == 'object') {
				// 数组格式
				var ruleArr = rule;
			}
			if (typeof this[ruleArr[0]] != 'function') {
				// 别名转换
				ruleArr[0] = this.getAlias(ruleArr[0]);
			}
			return this[ruleArr[0]](ruleArr[1], value);
	}
}
// const Validate = {
// 	phone: /^1[0-9]{10}$/,
// 	integer: /(^[0-9]*$)/,
// 	integerNotZore: /(^[1-9]{1}[0-9]*$)/,
// 	password: /(^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$)/
// }

export default function(rule, value, data, callback){
	let { errorMessage, format } = {...rule};
	const eMsg = errorMessage ? errorMessage : `${value}格式错误`;
	if(!checkResult(format, value)){
		callback(eMsg);
	}
	return true;
}
